iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0

前言

接著呢,我們繼續把上傳照片的功能做出來。首先是希望能在註冊的時候,能夠取得相簿的照片,然後把他上傳到我們昨天連線的storage,最後再將url回傳,將圖片顯示於UI上。

DatabaseManager

我們進到RegisterViewController看,當按下註冊的按鈕的時候,若這個使用者帳號沒有被使用過,就會進行建立帳號,也就是此時對資料庫做更動。

insertUser

Trace到insertUser這個方法,發現剛好這就是先前一直沒有解到的bug。其實也不難,但我對closure還沒完全解鎖,所以也不知道該怎麼補上完整的程式。
因為現在的方法已經變成這樣

public func insertUser(with user: ChatAppUser, completion: @escaping(Bool) -> Void)

因此在其他地方呼叫時也要一併加上先前沒有寫進去的參數。此時就會想,以前開發c#的時候都可以用resharper哪,回不去了手動加參數的歲月了
快捷鍵cmd+sft+F,可以搜尋整個專案中的被使用到方法的地方。

接著就能找到先前出現bug的地方!好感動!!!

RegisterViewController

我們將原本此處insertUser的參數with抽出來,即chatUser

let chatUser = ChatAppUser (firstName: firstname,
                            lastName: lastname,
                            emailAddress: email)

接著加上缺少的completion,當完成的時候,我們就將圖片使用昨天寫的方法uploadProfilePicture上傳,上傳也成功後就根據回傳的url將圖片存在快取裡。

DatabaseManager.shared.insertUser(with: chatUser, completion: { success in
    if success {
        // upload image
        guard let image = strongSelf.imageView.image, let data = image.pngData() else {
            return
        }
        let fileName = chatUser.profilePictureFileName
        StorageManager.shared.uploadProfilePicture(with: data, fileName: fileName, completion: { result in
            switch result {
            case .success(let downloadUrl):
                // set in cache
                UserDefaults.standard.set(downloadUrl, forKey: "profile_picture_url")
                print(downloadUrl)
            case .failure(let error):
                print("Storage manager error: \(error)")
            }
        })
    }
})

UserModel

第211行的fileName,是這次新增的model property。

舉例來說,若我們希望檔名存成a8udej-gmail-com_profile_picture.jpg,即使用資料庫的key值safeEmail來作為檔名。

var profilePictureFileName: String {
    return "\(safeEmail)_profile_picture.png"
}

結語

可以執行了!!!!
此時再開模擬器,就可以跑了~可喜可賀呀

雖然這個功能尚未完善,不過目前可以回到對話繼續開發,在來日不多的時日中,希望可以把對話功能先開發完XDDD

若上述內容有誤或可以改進的部分,歡迎留言以及提出任何指教~
謝謝 ヘ| ´ω` |ノ


上一篇
Day#27 上傳照片
下一篇
Day#29 對話(2)
系列文
來寫看看app好了! Swift探索之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言